Загрузим данные из кода в Jupyter Notebook.

players_df <- as.data.frame(read.csv('top_players.csv'))

Анализ посчитаных расстояний будем выполнять с помощью построения зависимости между points и average. Как видно из графика мы снова получаем самые важные кластеры 2, 6, 7. На этом графике благодаря прозрачности точек можно увидеть, что плотность точек внизу выше. Следовательно более короткое расстояние позволяет защищать и блокировать лучше.

pl_df <- na.omit(players_df)

pl_df <- pl_df[pl_df$enter > 2,]

pl_df$points <- pl_df$points

        
p <- ggplot(pl_df, aes(average, points)) +
  geom_point(mapping=aes(colour=as.factor(points_cnt)), alpha=0.2) +
  geom_smooth(method = "lm",  se=FALSE) +
  ggtitle("Dependence of points by player") +
  xlab("Distance") +
  ylab("Points") +
  labs(colour="Cluster")

ggplotly(p)

Построим функцию плотности для average

d1 <- density(pl_df$average)
plot(d1, main="Density for average distance", xlab="Value", ylab="Density")

Мы получаем что пик среднего расстояния приходится на 5 ярдов.

d2 <- density(pl_df$minDist)
plot(d2, main="Density for minimum distance", xlab="Value", ylab="Density")

А для минимальных расстояний мы получаем, что график имеет два максимума - это значения, где защитник повалил соперника и расстояние около 1 ярда и где он его прикрывает ~ 3 ярда.

Таким образом на основе графиков плотности мы видим, что наибольшая эффективность защиты достигается при тактике короткой дистанции.